package com.clps.algorithm.chapter08.所有大于等于结点的值之和;

import com.clps.algorithm.chapter07.二叉树每层的最大值.TreeNode;

import java.util.Stack;

/**
 * 给你一个二叉搜索树，请将它的每个结点的值替换成树中大于或者等于该结点值的所有结点值之和。假设二叉搜索树中结点的值唯一。例如，输入图8.10（a）中的二叉搜索树，
 * 由于有两个结点的值大于或者等于6（即结点6和结点7），因此值为6结点的值替换成13，其他结点的值的替换过程类似，所有结点的值替换之后的结果如图8.10（b）所示。
 */
public class demo1 {

    public static void main(String[] args) {

    }

    public TreeNode converBst(TreeNode root){
        Stack<TreeNode> stack = new Stack<>();
        TreeNode cur = root;
        int sum = 0;
        while (cur!=null ||!stack.isEmpty()){
            while (cur!=null){
                stack.push(cur);
                cur = cur.right;
            }

            cur = stack.pop();
            sum+=cur.val;
            cur.val = sum;
            cur = cur.left;
        }
        return  root;
    }
}
